home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / devel / tcl / itcl1_31.z / itcl1_31 / tcldev / itcl-1.3 / tests / uplevel.test < prev    next >
Encoding:
Text File  |  1993-09-23  |  3.8 KB  |  152 lines

  1. #
  2. # Tests for "uplevel" across interpreter boundaries
  3. # ----------------------------------------------------------------------
  4. #   AUTHOR:  Michael J. McLennan       Phone: (215)770-2842
  5. #            AT&T Bell Laboratories   E-mail: aluxpo!mmc@att.com
  6. #
  7. #     SCCS:  @(#)uplevel.test    1.1 (9/9/93)
  8. # ----------------------------------------------------------------------
  9. #            Copyright (c) 1993  AT&T  All Rights Reserved
  10. # ======================================================================
  11.  
  12. # ----------------------------------------------------------------------
  13. #  DEFINE SOME USEFUL ROUTINES
  14. # ----------------------------------------------------------------------
  15. proc uplevelTest_show_var {level var} {
  16.     return "$var>>[uplevel $level set $var]"
  17. }
  18.  
  19. proc uplevelTest_do {cmd} {
  20.     eval $cmd
  21. }
  22.  
  23. # ----------------------------------------------------------------------
  24. #  CREATE SOME OBJECTS
  25. # ----------------------------------------------------------------------
  26. Foo foo
  27. Baz baz
  28.  
  29. # ----------------------------------------------------------------------
  30. #  UPLEVEL TESTS (main interp)
  31. # ----------------------------------------------------------------------
  32. test {"uplevel" can access global variables (via relative level)} {
  33.     set globalvar "global value"
  34.     uplevelTest_show_var 1 globalvar
  35. } {
  36.     $result == "globalvar>>global value"
  37. }
  38.  
  39. test {"uplevel" can access global variables (via "#0")} {
  40.     set globalvar "global value"
  41.     uplevelTest_show_var #0 globalvar
  42. } {
  43.     $result == "globalvar>>global value"
  44. }
  45.  
  46. test {"uplevel" can access local variables (via relative level)} {
  47.     uplevelTest_do {
  48.         set localvar "local value"
  49.         uplevelTest_show_var 1 localvar
  50.     }
  51. } {
  52.     $result == "localvar>>local value"
  53. }
  54.  
  55. test {"uplevel" can access local variables (via relative level)} {
  56.     uplevelTest_do {
  57.         set localvar "proper value"
  58.         uplevelTest_do {
  59.             set localvar "not this one"
  60.             uplevelTest_show_var 2 localvar
  61.         }
  62.     }
  63. } {
  64.     $result == "localvar>>proper value"
  65. }
  66.  
  67. test {"uplevel" can access local variables (via explicit level)} {
  68.     uplevelTest_do {
  69.         set localvar "local value"
  70.         uplevelTest_show_var #1 localvar
  71.     }
  72. } {
  73.     $result == "localvar>>local value"
  74. }
  75.  
  76. # ----------------------------------------------------------------------
  77. #  UPLEVEL TESTS (across class interps)
  78. # ----------------------------------------------------------------------
  79. test {"uplevel" can cross class interps to access global variables} {
  80.     set globalvar "global value"
  81.     foo do {
  82.         uplevel #0 uplevelTest_show_var 1 globalvar
  83.     }
  84. } {
  85.     $result == "Foo says 'globalvar>>global value'"
  86. }
  87.  
  88. test {"uplevel" can cross several class interps to access global variables} {
  89.     set globalvar "global value"
  90.     baz do {
  91.         foo do {
  92.             uplevel 2 uplevelTest_show_var #0 globalvar
  93.         }
  94.     }
  95. } {
  96.     $result == "Baz says 'Foo says 'globalvar>>global value''"
  97. }
  98.  
  99. test {"uplevel" finds proper interp for execution} {
  100.     baz do {
  101.         foo do {
  102.             uplevel do {{info class}}
  103.         }
  104.     }
  105. } {
  106.     $result == "Baz says 'Foo says 'Baz says 'Baz'''"
  107. }
  108.  
  109. test {"uplevel" finds proper interp for execution,
  110. and works in conjunction with "unknown" to access
  111. commands at the global scope with local call frames} {
  112.     baz do {
  113.         set bazvar "value in Baz"
  114.         foo do {
  115.             uplevel ::info locals
  116.         }
  117.     }
  118. } {
  119.     $result == "Baz says 'Foo says 'bazvar cmds''"
  120. }
  121.  
  122. # ----------------------------------------------------------------------
  123. #  LEVEL TESTS (across class interps)
  124. # ----------------------------------------------------------------------
  125. test {"info level" works across interp boundaries} {
  126.     baz do {
  127.         foo do {
  128.             info level
  129.         }
  130.     }
  131. } {
  132.     $result == "Baz says 'Foo says '2''"
  133. }
  134.  
  135. test {"info level" works across interp boundaries} {
  136.     baz do {
  137.         foo do {
  138.             info level 0
  139.         }
  140.     }
  141. } {
  142.     $result == "Baz says 'Foo says 'do {
  143.             info level 0
  144.         }''"
  145. }
  146.  
  147. # ----------------------------------------------------------------------
  148. #  CLEAN UP
  149. # ----------------------------------------------------------------------
  150. foo delete
  151. baz delete
  152.